'use strict';

const Joi = require('joi');
const Result = require("../basics/result");
// 验证
/**
 * 参数校验
 * @param {Object} checkInfo 要校验的对象
 * @param {Object} schema 参数校验
 * @param {Object} option 可选项
 * @param {Boolean} option.abortEarly: 设置 true，可以在检测到第一个错误时立即返回，默认 false(检查全部)。推荐设置 true
 * @param {Boolean} option.convert:设置 true，可以尝试将值转换为所需的类型(例如，将字符串转换为数字）。默认为 true。推荐采用默认
 * @param {Boolean} option.allowUnknown: 默认 false，则允许对象包含被忽略的未知键。默认为 false。推荐设置 true
 * @param {Boolean} option.skipFunctions:如果为 true，则忽略具有函数值的未知键。默认为 false。推荐采用默认
 * @param {Boolean} option.stripUnknown: 默认为 false,从对象和数组中删除未知的元素。默认为 false。也可以特殊的设置成 { objects: true , arrays: true }的形式，可以对象和数组分别处理。推荐采用默认
 * @param {String} option.presence: 设置默认的可选需求。支持的模式:’optional’,’required’,和 ’forbidden’。默认为 ’optional’。推荐采用默认
 * @param {Boolean} option.escapeHtml: 当为 true时，出于安全目的，错误消息模板将特殊字符转义为html实体。默认为 false。推荐采用默认
 * @param {Boolean} option.noDefaults:如果为 true，则不应用默认值。默认为 false。推荐采用默认
 */
const option = {
  allowUnknown: true,
  abortEarly: true,
  convert: true
};
exports.validate = function (rules, obj) {
  let schema = Joi.object().keys({
    ...rules
  });
  // const data = Joi.validate(obj, schema, option);
  const data = schema.validate(obj, option);
  if (data.error) {
    console.log("--------validate error:", data.error);
    throw Result.error(Result.constant.paramfail);
  }
};
